[JAVA 3] JAVA에서 사용하는 연산자

[JAVA 3] JAVA에서 사용하는 연산자

Lecture
Language
태그
language
java
public
완성
Y
생성일
Mar 17, 2024 04:36 PM
LectureName
Java

1. 연산자의 이해

연산자는 연산을 수행하는 기호를 말한다. 사칙 연산에 사용되는(+, -, *, /) 등 사칙연산을 포함한 다른 연산자도 Java에서 사용한다
 
💡
연산자와 피 연산자
  • 연산자 : 연산을 수행하는 기호( +, -, …등등)
  • 피 연산자 : 연산자의 수행 대상 (상수, 리터럴, 변수 등)
 
 

2. 연산자의 종류

종류
연산자
우선순위
단항 연산자
++ — + - ! ~
높음
산술 연산자
* / %
+ - ( 곱하기 -1 )
<< >>
비교 연산자
> >= instanceof
== !=
논리 연산자
& ^ | && || (순서대로 우선순위 높음)
삼항 연산자
? : ex) (a>b) ? c : d
대입 연산자
= += -= *= /= %= <<= &= ^= |=
낮음
 
💡
산술 변환 피 연산자의 타입이 서로 다르다면 연산 전에 형 변환 연산자로 타입을 일치 시켜야 한다. 자동으로 형 변환이 되는 경우 두 피 연산자의 타입 중에서 더 큰 타입으로 일치 시킨다.
int a = 10; float b = 10.24f; float c = a + b; //큰 타입으로 형 변환 시, 형 변환 연산자 생략 가능 //or float c = float(a) + b

😜세가지만 기억하기
  • 산술 연산 때는 피 연산자의 타입이 같아야 한다.
  • 피 연산자의 타입이 int보다 작으면 int타입으로 변환된다.
  • 연산 결과와 저장 변수의 타입은 다를 수 있다.
  • 피 연산자가 int보단 크고 서로 다르면 더 큰 피 연산자 타입으로 변환된다.
//case1 너무 큰 자료형 byte a = 110; byte b = 110; byte err_byte = a+b; //에러 byte correct_byte = byte(a+b); //case2 연산 결과가 int, 자료형은 long 에러가 발생할까? long err_long = 2000000 * 2000000; //1385447424(overflow) long correct_long = 2000000L * 2000000L; long correct_long = (long)2000000 * (long)2000000; //case3 계산 순서의 영향 int error_order = 1000000 * 1000000 / 1000000; //overflow, 곱하고 나눴기 때문에 이미 overflow된 값이다.
 
 
단항 연산자
  1. 증감 연산자 ( ++ — )
  • ++ → 피 연산자의 값을 1 증가 시킨다.
  • — → 피 연산자의 값을 1 감소 시킨다.
 
1.1 코드로 보는 증감 연산자
public class Operator1 { public static void main(String[] args){ int a = 10; int b = 10; System.out.println("뒤에있는 ++" + a++); //10 System.out.println("앞에있는 ++" + ++b); //11 } }
  • 뒤에 붙어있는 증감 연산자는 변수를 먼저 읽어오고 수식을 더한다
  • 앞에 있는 연산자는 더하고 변수를 읽어온다.
 
  1. 부호 연산자 ( + - )
int a = 10; a = -a // -10
  • 부호 연산자는 피 연산자의 부호를 반대로 변경한 결과를 반환한다.
 
  1. 산술 연산자
public class Operator2 { public static void main(String[] args){ int a = 10; int b = 3; System.out.printf("%d + %d = %d\n", a, b, a + b); System.out.printf("%d - %d = %d\n", a, b, a - b); System.out.printf("%d * %d = %d\n", a, b, a * b); System.out.printf("%d / %d = %d\n", a, b, a / b); System.out.printf("%d / %f = %f\n", a, (float)b, a / (float)b); System.out.printf("%d / %d = %d\n", a, b, a % b); } } //정답 10 + 3 = 13 10 - 3 = 7 10 * 3 = 30 10 / 3 = 3 10 / 3.000000 = 3.333333 10 % 3 = 1
 
  1. 비교 연산자( 대소 비교 → < > 등가 비교 → == != )
int a = 10; int b = 20; a > b //false a < b //true a >= b //false a <= b //true a == b //false a != b //true //주의사항 int a = 10; float b = 10f; a == b //true int a = 0.1; float b = 0.1f; a == b //false //실수형은 근삿값으로 저장되기 때문에 오차가 발생할 수 있기때문에 false이다. //따라서 실수를 비교할떄는 float로 변환해주고 비교해야한다.
 
🙆🏻 주의 사항
  • 문자열의 비교는 String 클래스에서 제공하는 equals() 함수로 비교해야 함.
public class OperatorStr { public static void main(String[] args){ String str1 = new String("abc"); String str2 = "abc"; System.out.println(str1==str2); //false System.out.println(str1.equals(str2)); //true } }
비교 연산자 “==”는 두 문자열이 완벽히 같은 지만 판단하기 때문에 false가 출력 된다.
 
  1. 논리 연산자( &&, ||, ! )
  • && ( AND 연산자 )
  • || ( OR 연산자 )
  • ! ( NOT 연산자 )
 
🤪 헷갈리는 논리 연산자 한번에 보기
A
B
A && B
A || B
! A , ! B
true
true
true
true
false, false
true
false
flase
true
false, true
false
false
false
false
true, true
 
😝 논리 연산자와 비교 연산자를 활용해보기
import java.util.*; public class Operatormix { public static void main(String args[]){ Scanner scan = new Scanner(System.in); System.out.println("한개의 문자를 입력하세요"); String str1 = scan.nextLine(); char ch = str1.charAt(0); if ('0'<=ch && ch<='9'){ System.out.println("숫자입니다."); } if ('a'<=ch && ch<= 'z' || 'A'<=ch && ch<='Z'){ System.out.println("영문자 입니다"); } } }
💡
  • AND 연산의 경우에는 거짓 구문일 확률이 높은 구문을 왼쪽에
  • OR 연산의 경우에는 참 구문을 왼쪽에 두면 컴파일 속도가 빨라 질 수 있습니다.
 
  1. 비트 연산자 ( & | ^ ~ << >> )
  • & (AND 연산자) → 서로 같을 때만 1
  • | (OR 연산자) → 둘중 한개만 1이여도 1
  • ^ (XOR 연산자) → 두 비트가 같으면 0 다르면 1
 
6.1 한눈에 알아보는 비트 연산자
x
y
x & y
x | y
x ^ y
~x, ~y
0
0
0
0
0
1, 1
1
0
0
1
1
0, 1
0
1
0
1
1
1, 0
1
1
1
1
0
0, 0
6.2 쉬프트 연산자
  • 비트 이동 연산자라고 생각하면 된다.
//어려운 부분이 많으니 개념만 익히고 가도록 하자 1011(2) 1011<<1 -> 10110 1011>>1 -> 101
<< 연산은 * 2 n승과 같고 >> 연산은 / 2 n승과 같다.
 
  1. 그 외 연산자
  • ? : 연산자 ( 물음표 앞에 있는 수식이 true이면 따옴표 왼쪽 값을, false면 오른쪽 값을 출력한다)
int a = 10; int b = 20; ( a > b ) ? 10 : 20; //20 ( a < b ) ? 10 : 20; //10
 
  • =, op= 연산자(복합 대입 연산자)
int a = 10; int b = 20; a = a + b //a+b의 값을 a에 저장 a += b //a+b의 값을 a에 저장 a -= a *=
이와 같이 다른 연산자(op)와 결합하여 op= 와 같은 방식으로 나타낼 수 있다.